using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._NetworkAnalystTools._Analysis
{
    /// <summary>
    /// <para>Make Vehicle Routing Problem Analysis Layer</para>
    /// <para>Creates a vehicle routing problem (VRP) network analysis layer and sets its analysis properties. A VRP analysis layer is useful for optimizing a set of routes using a fleet of vehicles. The layer can be created using a local network dataset or a service hosted online or in a portal.</para>
    /// <para>创建车辆配送路线问题 （VRP） 网络分析图层并设置其分析属性。VRP 分析图层可用于使用车队优化一组路径。可以使用本地网络数据集或在线或门户中托管的服务来创建图层。</para>
    /// </summary>    
    [DisplayName("Make Vehicle Routing Problem Analysis Layer")]
    public class MakeVehicleRoutingProblemAnalysisLayer : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public MakeVehicleRoutingProblemAnalysisLayer()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_network_data_source">
        /// <para>Network Data Source</para>
        /// <para>The network dataset or service on which the network analysis will be performed. Use the portal URL for a service.</para>
        /// <para>将对其执行网络分析的网络数据集或服务。使用服务的门户 URL。</para>
        /// </param>
        public MakeVehicleRoutingProblemAnalysisLayer(object _network_data_source)
        {
            this._network_data_source = _network_data_source;
        }
        public override string ToolboxName => "Network Analyst Tools";

        public override string ToolName => "Make Vehicle Routing Problem Analysis Layer";

        public override string CallName => "na.MakeVehicleRoutingProblemAnalysisLayer";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_network_data_source, _layer_name, _travel_mode, _time_units.GetGPValue(), _distance_units.GetGPValue(), _default_date, _time_zone_for_time_fields.GetGPValue(), _line_shape.GetGPValue(), _time_window_factor.GetGPValue(), _excess_transit_factor.GetGPValue(), _generate_directions_on_solve.GetGPValue(), _spatial_clustering.GetGPValue(), _out_network_analysis_layer];

        /// <summary>
        /// <para>Network Data Source</para>
        /// <para>The network dataset or service on which the network analysis will be performed. Use the portal URL for a service.</para>
        /// <para>将对其执行网络分析的网络数据集或服务。使用服务的门户 URL。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Data Source")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _network_data_source { get; set; }


        /// <summary>
        /// <para>Layer Name</para>
        /// <para>The name of the VRP network analysis layer to create.</para>
        /// <para>要创建的 VRP 网络分析图层的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Layer Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _layer_name { get; set; } = null;


        /// <summary>
        /// <para>Travel Mode</para>
        /// <para><xdoc>
        ///   <para>The name of the travel mode to use in the analysis. The travel mode represents a collection of network settings, such as travel restrictions and U-turn policies, that determine how a pedestrian, car, truck, or other medium of transportation moves through the network. Travel modes are defined on your network data source. An arcpy.na.TravelMode object and a string containing the valid JSON representation of a travel mode can also be used as input to the parameter.</para>
        ///   <para>VRP only solves with a time-based impedance, so only time-based impedance travel modes are available for selection.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>要在分析中使用的出行模式的名称。出行模式表示一组网络设置，例如出行限制和 U 形转弯策略，这些设置决定了行人、汽车、卡车或其他交通工具在网络中的移动方式。出行模式是在网络数据源上定义的。还可以将 arcpy.na.TravelMode 对象和包含出行模式的有效 JSON 表示形式的字符串用作参数的输入。</para>
        ///   <para>VRP 仅使用基于时间的阻抗进行求解，因此只有基于时间的阻抗传输模式可供选择。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Travel Mode")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _travel_mode { get; set; } = null;


        /// <summary>
        /// <para>Time Field Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the time units to be used by the temporal fields of the analysis layer's sublayers and tables (network analysis classes). This value does not need to match the units of the time cost attribute.</para>
        ///   <bulletList>
        ///     <bullet_item>Minutes—The time units will be minutes. This is the default.</bullet_item><para/>
        ///     <bullet_item>Seconds—The time units will be seconds.</bullet_item><para/>
        ///     <bullet_item>Hours—The time units will be hours.</bullet_item><para/>
        ///     <bullet_item>Days—The time units will be days.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析图层的子图层和表（网络分析类）的时态字段要使用的时间单位。此值不需要与时间成本属性的单位匹配。</para>
        ///   <bulletList>
        ///     <bullet_item>分钟—时间单位将为分钟。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>秒—时间单位为秒。</bullet_item><para/>
        ///     <bullet_item>小时—时间单位将为小时。</bullet_item><para/>
        ///     <bullet_item>天—时间单位为天。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Field Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_units_value _time_units { get; set; } = _time_units_value._Minutes;

        public enum _time_units_value
        {
            /// <summary>
            /// <para>Minutes</para>
            /// <para>Minutes—The time units will be minutes. This is the default.</para>
            /// <para>分钟—时间单位将为分钟。这是默认设置。</para>
            /// </summary>
            [Description("Minutes")]
            [GPEnumValue("Minutes")]
            _Minutes,

            /// <summary>
            /// <para>Seconds</para>
            /// <para>Seconds—The time units will be seconds.</para>
            /// <para>秒—时间单位为秒。</para>
            /// </summary>
            [Description("Seconds")]
            [GPEnumValue("Seconds")]
            _Seconds,

            /// <summary>
            /// <para>Hours</para>
            /// <para>Hours—The time units will be hours.</para>
            /// <para>小时—时间单位将为小时。</para>
            /// </summary>
            [Description("Hours")]
            [GPEnumValue("Hours")]
            _Hours,

            /// <summary>
            /// <para>Days</para>
            /// <para>Days—The time units will be days.</para>
            /// <para>天—时间单位为天。</para>
            /// </summary>
            [Description("Days")]
            [GPEnumValue("Days")]
            _Days,

        }

        /// <summary>
        /// <para>Distance Field Units</para>
        /// <para><xdoc>
        ///   <para>Specifies the distance units to be used by the distance fields of the analysis layer's sublayers and tables (network analysis classes). This value does not need to match the units of the optional distance cost attribute.</para>
        ///   <bulletList>
        ///     <bullet_item>Miles—The distance units will be miles. This is the default.</bullet_item><para/>
        ///     <bullet_item>Kilometers—The distance units will be kilometers.</bullet_item><para/>
        ///     <bullet_item>Feet—The distance units will be feet.</bullet_item><para/>
        ///     <bullet_item>Yards—The distance units will be yards.</bullet_item><para/>
        ///     <bullet_item>Meters—The distance units will be meters.</bullet_item><para/>
        ///     <bullet_item>Inches—The distance units will be inches.</bullet_item><para/>
        ///     <bullet_item>Centimeters—The distance units will be centimeters.</bullet_item><para/>
        ///     <bullet_item>Millimeters—The distance units will be millimeters.</bullet_item><para/>
        ///     <bullet_item>Decimeters—The distance units will be decimeters.</bullet_item><para/>
        ///     <bullet_item>Nautical Miles—The distance units will be nautical miles.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析图层的子图层和表（网络分析类）的距离字段要使用的距离单位。此值不需要与可选距离成本属性的单位匹配。</para>
        ///   <bulletList>
        ///     <bullet_item>英里—距离单位将为英里。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>公里—距离单位将为千米。</bullet_item><para/>
        ///     <bullet_item>英尺—距离单位为英尺。</bullet_item><para/>
        ///     <bullet_item>码—距离单位将为码。</bullet_item><para/>
        ///     <bullet_item>米—距离单位为米。</bullet_item><para/>
        ///     <bullet_item>英寸—距离单位将为英寸。</bullet_item><para/>
        ///     <bullet_item>厘米—距离单位将为厘米。</bullet_item><para/>
        ///     <bullet_item>毫米—距离单位将为毫米。</bullet_item><para/>
        ///     <bullet_item>分米—距离单位将为分米。</bullet_item><para/>
        ///     <bullet_item>海里—距离单位为海里。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Distance Field Units")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _distance_units_value _distance_units { get; set; } = _distance_units_value._Miles;

        public enum _distance_units_value
        {
            /// <summary>
            /// <para>Miles</para>
            /// <para>Miles—The distance units will be miles. This is the default.</para>
            /// <para>英里—距离单位将为英里。这是默认设置。</para>
            /// </summary>
            [Description("Miles")]
            [GPEnumValue("Miles")]
            _Miles,

            /// <summary>
            /// <para>Kilometers</para>
            /// <para>Kilometers—The distance units will be kilometers.</para>
            /// <para>公里—距离单位将为千米。</para>
            /// </summary>
            [Description("Kilometers")]
            [GPEnumValue("Kilometers")]
            _Kilometers,

            /// <summary>
            /// <para>Feet</para>
            /// <para>Feet—The distance units will be feet.</para>
            /// <para>英尺—距离单位为英尺。</para>
            /// </summary>
            [Description("Feet")]
            [GPEnumValue("Feet")]
            _Feet,

            /// <summary>
            /// <para>Yards</para>
            /// <para>Yards—The distance units will be yards.</para>
            /// <para>码—距离单位将为码。</para>
            /// </summary>
            [Description("Yards")]
            [GPEnumValue("Yards")]
            _Yards,

            /// <summary>
            /// <para>Meters</para>
            /// <para>Meters—The distance units will be meters.</para>
            /// <para>米—距离单位为米。</para>
            /// </summary>
            [Description("Meters")]
            [GPEnumValue("Meters")]
            _Meters,

            /// <summary>
            /// <para>Inches</para>
            /// <para>Inches—The distance units will be inches.</para>
            /// <para>英寸—距离单位将为英寸。</para>
            /// </summary>
            [Description("Inches")]
            [GPEnumValue("Inches")]
            _Inches,

            /// <summary>
            /// <para>Centimeters</para>
            /// <para>Centimeters—The distance units will be centimeters.</para>
            /// <para>厘米—距离单位将为厘米。</para>
            /// </summary>
            [Description("Centimeters")]
            [GPEnumValue("Centimeters")]
            _Centimeters,

            /// <summary>
            /// <para>Millimeters</para>
            /// <para>Millimeters—The distance units will be millimeters.</para>
            /// <para>毫米—距离单位将为毫米。</para>
            /// </summary>
            [Description("Millimeters")]
            [GPEnumValue("Millimeters")]
            _Millimeters,

            /// <summary>
            /// <para>Decimeters</para>
            /// <para>Decimeters—The distance units will be decimeters.</para>
            /// <para>分米—距离单位将为分米。</para>
            /// </summary>
            [Description("Decimeters")]
            [GPEnumValue("Decimeters")]
            _Decimeters,

            /// <summary>
            /// <para>Nautical Miles</para>
            /// <para>Nautical Miles—The distance units will be nautical miles.</para>
            /// <para>海里—距离单位为海里。</para>
            /// </summary>
            [Description("Nautical Miles")]
            [GPEnumValue("NauticalMiles")]
            _NauticalMiles,

        }

        /// <summary>
        /// <para>Default Date</para>
        /// <para>The implied date for time field values that don't have a date specified with the time. If a time field for an order object, such as TimeWindowStart, has a time-only value, the date is assumed to be the default date. The default date has no effect on time field values that already have a date.</para>
        /// <para>未指定与时间一起指定的日期字段值的隐含日期。如果订单对象（如 TimeWindowStart）的时间字段具有仅时间值，则假定该日期为默认日期。默认日期对已有日期的时间字段值没有影响。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Default Date")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _default_date { get; set; } = null;


        /// <summary>
        /// <para>Time Zone for Time Fields</para>
        /// <para><xdoc>
        ///   <para>Specifies the time zone to be used for the input date-time fields supported by the tool.</para>
        ///   <bulletList>
        ///     <bullet_item>Local time at locations— The date-time values associated with the orders or depots will be in the time zone in which the orders and depots are located. For routes, the date-time values are based on the time zone in which the starting depot for the route is located. If a route does not have a starting depot, all orders and depots across all the routes must be in a single time zone. For breaks, the date-time values are based on the time zone of the routes. This is the default.</bullet_item><para/>
        ///     <bullet_item>UTC—The date-time values associated with the orders or depots will be in coordinated universal time (UTC) and are not based on the time zone in which the orders or depots are located.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>Specifying the date-time values in UTC is useful if you do not know the time zone in which the orders or depots are located or when you have orders and depots in multiple time zones and you want all the date-time values to start simultaneously. The UTC option is applicable only when your network dataset defines a time zone attribute. Otherwise, all the date-time values are always treated as the time zone corresponding with that location.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定要用于工具支持的输入日期-时间字段的时区。</para>
        ///   <bulletList>
        ///     <bullet_item>位置的本地时间 - 与订单或仓库关联的日期时间值将位于订单和仓库所在的时区中。对于路线，日期时间值基于路线的起始仓库所在的时区。如果工艺路线没有起始仓库，则所有工艺路线中的所有订单和仓库都必须位于单个时区。对于休息时间，日期时间值基于路线的时区。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>UTC - 与订单或仓库关联的日期时间值将采用协调世界时 （UTC），而不是基于订单或仓库所在的时区。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>如果您不知道订单或仓库所在的时区，或者您的订单和仓库位于多个时区，并且希望所有日期时间值同时启动，则以 UTC 指定日期时间值非常有用。仅当网络数据集定义时区属性时，UTC 选项才适用。否则，所有日期时间值始终被视为与该位置对应的时区。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Zone for Time Fields")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_zone_for_time_fields_value _time_zone_for_time_fields { get; set; } = _time_zone_for_time_fields_value._LOCAL_TIME_AT_LOCATIONS;

        public enum _time_zone_for_time_fields_value
        {
            /// <summary>
            /// <para>UTC</para>
            /// <para>UTC—The date-time values associated with the orders or depots will be in coordinated universal time (UTC) and are not based on the time zone in which the orders or depots are located.</para>
            /// <para>UTC - 与订单或仓库关联的日期时间值将采用协调世界时 （UTC），而不是基于订单或仓库所在的时区。</para>
            /// </summary>
            [Description("UTC")]
            [GPEnumValue("UTC")]
            _UTC,

            /// <summary>
            /// <para>Local time at locations</para>
            /// <para>Local time at locations— The date-time values associated with the orders or depots will be in the time zone in which the orders and depots are located. For routes, the date-time values are based on the time zone in which the starting depot for the route is located. If a route does not have a starting depot, all orders and depots across all the routes must be in a single time zone. For breaks, the date-time values are based on the time zone of the routes. This is the default.</para>
            /// <para>位置的本地时间 - 与订单或仓库关联的日期时间值将位于订单和仓库所在的时区中。对于路线，日期时间值基于路线的起始仓库所在的时区。如果工艺路线没有起始仓库，则所有工艺路线中的所有订单和仓库都必须位于单个时区。对于休息时间，日期时间值基于路线的时区。这是默认设置。</para>
            /// </summary>
            [Description("Local time at locations")]
            [GPEnumValue("LOCAL_TIME_AT_LOCATIONS")]
            _LOCAL_TIME_AT_LOCATIONS,

        }

        /// <summary>
        /// <para>Output Route Shape</para>
        /// <para><xdoc>
        ///   <para>Specifies the shape type for the route features that are output by the analysis.</para>
        ///   <bulletList>
        ///     <bullet_item>Along network—The output routes will have the exact shape of the underlying network sources. The output includes route measurements for linear referencing. The measurements increase from the first stop and record the cumulative impedance to reach a given position.</bullet_item><para/>
        ///     <bullet_item>No lines—No shape will be generated for the output routes.</bullet_item><para/>
        ///     <bullet_item>Straight lines—The output route shape will be a single straight line between the stops.This option is not available if the selected network data source is a service.</bullet_item><para/>
        ///   </bulletList>
        ///   <para>No matter which output shape type is chosen, the best route is always determined by the network impedance, never Euclidean distance. This means that only the route shapes are different, not the underlying traversal of the network.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定分析输出的路径要素的形状类型。</para>
        ///   <bulletList>
        ///     <bullet_item>沿网络 - 输出路由将具有基础网络源的确切形状。输出包括用于线性参考的路径测量值。测量值从第一站开始增加，并记录累积阻抗以达到给定位置。</bullet_item><para/>
        ///     <bullet_item>无线 - 不会为输出路径生成任何形状。</bullet_item><para/>
        ///     <bullet_item>直线—输出路径形状将为停靠点之间的一条直线。如果所选网络数据源是服务，则此选项不可用。</bullet_item><para/>
        ///   </bulletList>
        ///   <para>无论选择哪种输出形状类型，最佳路由始终由网络阻抗决定，而不是欧几里得距离。这意味着只有路由形状不同，而网络的基础遍历不同。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Route Shape")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _line_shape_value _line_shape { get; set; } = _line_shape_value._ALONG_NETWORK;

        public enum _line_shape_value
        {
            /// <summary>
            /// <para>No lines</para>
            /// <para>No lines—No shape will be generated for the output routes.</para>
            /// <para>无线 - 不会为输出路径生成任何形状。</para>
            /// </summary>
            [Description("No lines")]
            [GPEnumValue("NO_LINES")]
            _NO_LINES,

            /// <summary>
            /// <para>Straight lines</para>
            /// <para>Straight lines—The output route shape will be a single straight line between the stops.This option is not available if the selected network data source is a service.</para>
            /// <para>直线—输出路径形状将为停靠点之间的一条直线。如果所选网络数据源是服务，则此选项不可用。</para>
            /// </summary>
            [Description("Straight lines")]
            [GPEnumValue("STRAIGHT_LINES")]
            _STRAIGHT_LINES,

            /// <summary>
            /// <para>Along network</para>
            /// <para>Along network—The output routes will have the exact shape of the underlying network sources. The output includes route measurements for linear referencing. The measurements increase from the first stop and record the cumulative impedance to reach a given position.</para>
            /// <para>沿网络 - 输出路由将具有基础网络源的确切形状。输出包括用于线性参考的路径测量值。测量值从第一站开始增加，并记录累积阻抗以达到给定位置。</para>
            /// </summary>
            [Description("Along network")]
            [GPEnumValue("ALONG_NETWORK")]
            _ALONG_NETWORK,

        }

        /// <summary>
        /// <para>Time Window Violation Importance</para>
        /// <para><xdoc>
        ///   <para>Specifies the importance of honoring time windows without causing violations. A time window violation occurs when a route arrives at an order, depot, or break after a time window has closed. The violation is the interval between the end of the time window and the arrival time of a route.</para>
        ///   <bulletList>
        ///     <bullet_item>High—The solver searches for a solution that minimizes time window violations at the expense of increasing the overall travel time. Choose this setting if arriving on time at orders is more important than minimizing the overall solution cost. This may be the case if you are meeting customers at your orders and you don't want to inconvenience them with late arrivals (another option is to use rigid time windows that cannot be violated).Given other constraints of a vehicle routing problem, it may be impossible to visit all the orders within their time windows. In this case, even a High setting might produce violations.</bullet_item><para/>
        ///     <bullet_item>Medium—The solver searches for a balance between meeting time windows and reducing the overall solution cost. This is the default.</bullet_item><para/>
        ///     <bullet_item>Low—The solver searches for a solution that minimizes overall travel time, regardless of time windows. Choose this setting if respecting time windows is less important than reducing the overall solution cost. You may want to use this setting if you have a growing backlog of service requests. For the purpose of servicing more orders in a day and reducing the backlog, you can choose this setting even though customers may be inconvenienced with your fleet's late arrivals.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定在不造成违规的情况下遵守时间窗口的重要性。当工艺路线在时间窗口关闭后到达订单、仓库或中断时，会发生时间窗口冲突。违规是时间窗口结束与路由到达时间之间的间隔。</para>
        ///   <bulletList>
        ///     <bullet_item>高 - 求解器将搜索以增加总行程时间为代价来最大程度地减少时间窗冲突的解决方案。如果按时到达订单比最小化整体解决方案成本更重要，请选择此设置。如果您按照订单与客户会面，并且不想因迟到而给他们带来不便，则可能是这种情况（另一种选择是使用不能违反的严格时间窗口）。考虑到车辆路径问题的其他限制，可能无法在其时间窗口内访问所有订单。在这种情况下，即使设置为“高”也可能会产生冲突。</bullet_item><para/>
        ///     <bullet_item>中 - 求解器在满足时间窗口和降低总体求解成本之间寻找平衡。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>低 - 求解器将搜索可最大限度减少总行程时间的解决方案，而不考虑时间窗口。如果遵守时间窗口不如降低总体解决方案成本重要，请选择此设置。如果积压的服务请求不断增加，则可能需要使用此设置。为了在一天内处理更多订单并减少积压，即使客户可能会因车队迟到而感到不便，您也可以选择此设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Time Window Violation Importance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _time_window_factor_value _time_window_factor { get; set; } = _time_window_factor_value._Medium;

        public enum _time_window_factor_value
        {
            /// <summary>
            /// <para>High</para>
            /// <para>High—The solver searches for a solution that minimizes time window violations at the expense of increasing the overall travel time. Choose this setting if arriving on time at orders is more important than minimizing the overall solution cost. This may be the case if you are meeting customers at your orders and you don't want to inconvenience them with late arrivals (another option is to use rigid time windows that cannot be violated).Given other constraints of a vehicle routing problem, it may be impossible to visit all the orders within their time windows. In this case, even a High setting might produce violations.</para>
            /// <para>高 - 求解器将搜索以增加总行程时间为代价来最大程度地减少时间窗冲突的解决方案。如果按时到达订单比最小化整体解决方案成本更重要，请选择此设置。如果您按照订单与客户会面，并且不想因迟到而给他们带来不便，则可能是这种情况（另一种选择是使用不能违反的严格时间窗口）。考虑到车辆路径问题的其他限制，可能无法在其时间窗口内访问所有订单。在这种情况下，即使设置为“高”也可能会产生冲突。</para>
            /// </summary>
            [Description("High")]
            [GPEnumValue("High")]
            _High,

            /// <summary>
            /// <para>Medium</para>
            /// <para>Medium—The solver searches for a balance between meeting time windows and reducing the overall solution cost. This is the default.</para>
            /// <para>中 - 求解器在满足时间窗口和降低总体求解成本之间寻找平衡。这是默认设置。</para>
            /// </summary>
            [Description("Medium")]
            [GPEnumValue("Medium")]
            _Medium,

            /// <summary>
            /// <para>Low</para>
            /// <para>Low—The solver searches for a solution that minimizes overall travel time, regardless of time windows. Choose this setting if respecting time windows is less important than reducing the overall solution cost. You may want to use this setting if you have a growing backlog of service requests. For the purpose of servicing more orders in a day and reducing the backlog, you can choose this setting even though customers may be inconvenienced with your fleet's late arrivals.</para>
            /// <para>低 - 求解器将搜索可最大限度减少总行程时间的解决方案，而不考虑时间窗口。如果遵守时间窗口不如降低总体解决方案成本重要，请选择此设置。如果积压的服务请求不断增加，则可能需要使用此设置。为了在一天内处理更多订单并减少积压，即使客户可能会因车队迟到而感到不便，您也可以选择此设置。</para>
            /// </summary>
            [Description("Low")]
            [GPEnumValue("Low")]
            _Low,

        }

        /// <summary>
        /// <para>Excess Transit Time Importance</para>
        /// <para><xdoc>
        ///   <para>Specifies the importance of reducing excess transit time. Excess transit time is the amount of time exceeding the time required to travel directly between paired orders. The excess time results from breaks or travel to other orders or depots between visits to the paired orders. This parameter is only relevant if you're using Order Pairs.</para>
        ///   <bulletList>
        ///     <bullet_item>High—The solver searches for a solution with less excess transit time between paired orders at the expense of increasing the overall travel costs. Use this setting if you are transporting people between paired orders and you want to shorten their ride time. This is characteristic of taxi services.</bullet_item><para/>
        ///     <bullet_item>Medium—The solver searches for a balance between reducing excess transit time and reducing the overall solution cost. This is the default.</bullet_item><para/>
        ///     <bullet_item>Low—The solver searches for a solution that minimizes overall solution cost, regardless of excess transit time. This setting is commonly used with courier services. Since couriers transport packages as opposed to people, ride time is not as important. Using this setting allows couriers to service paired orders in the proper sequence and minimize the overall solution cost.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定减少多余运输时间的重要性。超额运输时间是指超过直接在配对订单之间运输所需时间的时间。多余的时间是由于在访问配对订单之间休息或前往其他订单或仓库。仅当您使用订单对时，此参数才相关。</para>
        ///   <bulletList>
        ///     <bullet_item>高 - 求解器以增加总体差旅成本为代价，搜索配对订单之间多余运输时间较短的解决方案。如果您要在配对订单之间运送人员，并且希望缩短他们的乘车时间，请使用此设置。这是出租车服务的特征。</bullet_item><para/>
        ///     <bullet_item>中 - 求解器在减少多余传输时间和降低总体求解成本之间寻找平衡。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>低 - 求解器将搜索可将总体解决方案成本降至最低的解决方案，而不考虑是否超出传输时间。此设置通常用于快递服务。由于快递员运输包裹而不是人，因此乘车时间并不那么重要。使用此设置，快递员可以按正确的顺序为配对的订单提供服务，并最大限度地降低整体解决方案成本。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Excess Transit Time Importance")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _excess_transit_factor_value _excess_transit_factor { get; set; } = _excess_transit_factor_value._Medium;

        public enum _excess_transit_factor_value
        {
            /// <summary>
            /// <para>High</para>
            /// <para>High—The solver searches for a solution with less excess transit time between paired orders at the expense of increasing the overall travel costs. Use this setting if you are transporting people between paired orders and you want to shorten their ride time. This is characteristic of taxi services.</para>
            /// <para>高 - 求解器以增加总体差旅成本为代价，搜索配对订单之间多余运输时间较短的解决方案。如果您要在配对订单之间运送人员，并且希望缩短他们的乘车时间，请使用此设置。这是出租车服务的特征。</para>
            /// </summary>
            [Description("High")]
            [GPEnumValue("High")]
            _High,

            /// <summary>
            /// <para>Medium</para>
            /// <para>Medium—The solver searches for a balance between reducing excess transit time and reducing the overall solution cost. This is the default.</para>
            /// <para>中 - 求解器在减少多余传输时间和降低总体求解成本之间寻找平衡。这是默认设置。</para>
            /// </summary>
            [Description("Medium")]
            [GPEnumValue("Medium")]
            _Medium,

            /// <summary>
            /// <para>Low</para>
            /// <para>Low—The solver searches for a solution that minimizes overall solution cost, regardless of excess transit time. This setting is commonly used with courier services. Since couriers transport packages as opposed to people, ride time is not as important. Using this setting allows couriers to service paired orders in the proper sequence and minimize the overall solution cost.</para>
            /// <para>低 - 求解器将搜索可将总体解决方案成本降至最低的解决方案，而不考虑是否超出传输时间。此设置通常用于快递服务。由于快递员运输包裹而不是人，因此乘车时间并不那么重要。使用此设置，快递员可以按正确的顺序为配对的订单提供服务，并最大限度地降低整体解决方案成本。</para>
            /// </summary>
            [Description("Low")]
            [GPEnumValue("Low")]
            _Low,

        }

        /// <summary>
        /// <para>Generate Directions on Solve</para>
        /// <para><xdoc>
        ///   <para>Specifies whether directions will be generated.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—Turn-by-turn directions will be generated on solve. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—Turn-by-turn directions will not be generated on solve.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否生成方向。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 求解时将生成逐向转弯方向。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中—求解时不会生成逐向转弯方向。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Generate Directions on Solve")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _generate_directions_on_solve_value _generate_directions_on_solve { get; set; } = _generate_directions_on_solve_value._true;

        public enum _generate_directions_on_solve_value
        {
            /// <summary>
            /// <para>DIRECTIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DIRECTIONS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_DIRECTIONS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_DIRECTIONS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Spatial Clustering</para>
        /// <para><xdoc>
        ///   <para>Specifies whether spatial clustering will be used.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The orders assigned to an individual route will be spatially clustered. Clustering orders tends to keep routes in smaller areas and reduce how often route lines intersect one another; yet, clustering can increase overall travel times. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The solver will not prioritize spatially clustering orders and the route lines may intersect. Use this option if route zones are specified.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否使用空间聚类分析。</para>
        ///   <bulletList>
        ///     <bullet_item>选中—分配给单个路径的订单将在空间上聚类。聚类顺序倾向于将路径保持在较小的区域中，并减少路径线相互相交的频率;然而，聚类会增加整体旅行时间。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 求解器不会对空间聚类顺序进行优先级排序，并且路径线可能会相交。如果指定了路由区域，请使用此选项。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Spatial Clustering")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _spatial_clustering_value _spatial_clustering { get; set; } = _spatial_clustering_value._true;

        public enum _spatial_clustering_value
        {
            /// <summary>
            /// <para>CLUSTER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CLUSTER")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_CLUSTER</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_CLUSTER")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Network Analyst Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Network Analyst Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_network_analysis_layer { get; set; }


        public MakeVehicleRoutingProblemAnalysisLayer SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}